// @algorithm @lc id=48 lang=cpp 
// @title rotate-image


#define print(...)
// @test([[1,2,3],[4,5,6],[7,8,9]])=[[7,4,1],[8,5,2],[9,6,3]]
// @test([[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]])=[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
// @test([[1]])=[[1]]
// @test([[1,2],[3,4]])=[[3,1],[4,2]]
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        print("mat_ori:\n", Mat(matrix));
        int n = matrix.size();
        if(n==1) return;
        for(int i=0; i<n; i++)// 上下三角交换
            for(int j=0; j<i; j++)
                swap(matrix[i][j], matrix[j][i]);
        print("mat_tri:\n", Mat(matrix));
        for(int i=0; i<n; i++)// 左右对换
            for(int j=0; j<n/2; j++)
                swap(matrix[i][j], matrix[i][n-1-j]);
        print("left<->right:\n", Mat(matrix), "\n");
    }
};